/**
 * 时间格式化工具函数
 * @param {string|Date} time - 时间字符串或Date对象
 * @param {string} format - 输出格式，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(time, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!time) return ''

  let date
  if (typeof time === 'string') {
    // 处理ISO格式时间字符串，如: 2025-07-30T07:32:09.000000Z
    date = new Date(time)
  } else if (time instanceof Date) {
    date = time
  } else {
    return ''
  }

  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    return ''
  }

  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')

  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}

/**
 * 格式化日期（只显示日期部分）
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {string} 格式化后的日期字符串 YYYY-MM-DD
 */
export function formatDate(time) {
  return formatTime(time, 'YYYY-MM-DD')
}

/**
 * 格式化时间（只显示时间部分）
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {string} 格式化后的时间字符串 HH:mm:ss
 */
export function formatTimeOnly(time) {
  return formatTime(time, 'HH:mm:ss')
}

/**
 * 获取相对时间描述
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {string} 相对时间描述
 */
export function getRelativeTime(time) {
  if (!time) return ''

  const date = typeof time === 'string' ? new Date(time) : time
  const now = new Date()
  const diff = now.getTime() - date.getTime()

  const minute = 60 * 1000
  const hour = minute * 60
  const day = hour * 24
  const month = day * 30
  const year = day * 365

  if (diff < minute) {
    return '刚刚'
  } else if (diff < hour) {
    return `${Math.floor(diff / minute)}分钟前`
  } else if (diff < day) {
    return `${Math.floor(diff / hour)}小时前`
  } else if (diff < month) {
    return `${Math.floor(diff / day)}天前`
  } else if (diff < year) {
    return `${Math.floor(diff / month)}个月前`
  } else {
    return `${Math.floor(diff / year)}年前`
  }
}

/**
 * 检查是否为今天
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {boolean} 是否为今天
 */
export function isToday(time) {
  if (!time) return false

  const date = typeof time === 'string' ? new Date(time) : time
  const today = new Date()

  return (
    date.getDate() === today.getDate() &&
    date.getMonth() === today.getMonth() &&
    date.getFullYear() === today.getFullYear()
  )
}

/**
 * 检查是否为昨天
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {boolean} 是否为昨天
 */
export function isYesterday(time) {
  if (!time) return false

  const date = typeof time === 'string' ? new Date(time) : time
  const yesterday = new Date()
  yesterday.setDate(yesterday.getDate() - 1)

  return (
    date.getDate() === yesterday.getDate() &&
    date.getMonth() === yesterday.getMonth() &&
    date.getFullYear() === yesterday.getFullYear()
  )
}

/**
 * 获取友好的时间显示
 * @param {string|Date} time - 时间字符串或Date对象
 * @returns {string} 友好的时间显示
 */
export function getFriendlyTime(time) {
  if (!time) return ''

  if (isToday(time)) {
    return `今天 ${formatTimeOnly(time)}`
  } else if (isYesterday(time)) {
    return `昨天 ${formatTimeOnly(time)}`
  } else {
    return formatTime(time)
  }
}
